

public class Main {
    public static int sum(int num, int format) {
        int ret = 0;
        int tmp = num;
        //处理各进制每位之和
        while(tmp!=0) {
            ret+=(tmp%format);
            tmp/=format;
        }
        return ret;
    }
    public static boolean solve(int n) {
        if( n%(sum(n,2))==0 &&
                n%(sum(n,8))==0 &&
                n%(sum(n,10))==0 &&
                n%(sum(n,16))==0 )
        {
            return true;
        } else return false;
    }
    public static void main(String[] args) {
        int count = 0;
        int i = 1;
        //使用i来循环，count计数
        while(true) {
            if(solve(i)) {
                count++;
            }
            if(count==2023) {
                System.out.println(i);
                break;
            }
            i++;
        }
    }
}
//public class Main {
//    public static int sum(int i) {
//        int ret = 0;
//        while(i!=0) {
//            ret+=(i%10);
//            i/=10;
//        }
//        return ret;
//    }
//
//    public static void main(String[] args) {
//        Main m = new Main();
//
//    }
//    public static boolean solve(int i) {
//        int tmp = i;
//        //二进制
//        int B = sum(Integer.valueOf(Integer.toBinaryString(tmp)));
//        //八进制
//        int O = sum(Integer.valueOf(Integer.toOctalString(tmp)));
//        //十进制
//        int D = sum(tmp);
//        //十六进制
//        int H = sum(Integer.parseInt(Integer.toHexString(tmp),16));
//
//
//        if(i%B==0 &&
//            i%O==0 &&
//            i%D==0 &&
//            i%H==0) {
//            return true;
//        } else return false;
//    }
//    public static void main1(String[] args) {
//        //先要创建一个方法，来求一个数的二进制、八进制、十六进制
//        int count = 0;
//        int i = 1;
//        while(true) {
//            if(solve(i)) {
//                System.out.println(i);
//                count++;
//                if(count==2023) {
//                    System.out.println(i);
//                    break;
//                }
//            }
//            i++;
//        }
//
//    }
//}
//public class Main {
//    public static void main(String[] args) {
//        int a = 2023;
//
//        //int num = Integer.valueOf(Integer.toHexString(a));
//        String str = Integer.toHexString(a);
//        System.out.println(str);
//        int n = Integer.parseInt(str,16);
//        System.out.println(n);
//    }
//    public static void main(String[] args) {
//        int[][] array = new int[3][];
//        //分别对每个一维数组进行赋值
//        array[0] = new int[]{1,2,3};
//        array[1] = new int[]{1};
//        array[2] = new int[]{1,2,3,4,5,6,7,8};
//        for(int[] tmp: array) {
//            for(int x: tmp) {
//                System.out.print(x+" ");
//            }
//            System.out.println();
//        }
//    }

//        int[][] array = new int[][]{{1,2,3,4,5,6},{2,3,4,5,6,7}};
//        for (int[] x:array) {
//            for (int y:x) {
//                System.out.print(y+" ");
//            }
//            System.out.println();
//        }
//        System.out.println(Arrays.deepToString(array));
//        for(int i = 0; i < array.length; i++) {
//            for(int j = 0; j < array[i].length; j++) {
//                System.out.print(array[i][j]+" ");
//            }
//            System.out.println();
//        }
 //   }
//    public static void main(String[] args) {
//        //二维数组的创建
//        int[][] array1 = new int[][]{{1,2,3},{2,3,4}};
//        int[][] array =  {{1,2,3},{2,3,4}};
//
//    }
//    public static void main3(String[] args) {
//
//        int[] array = {1,3,75,4,8,9,3,14,25,1,};
//        Arrays.sort(array);
//        System.out.println(Arrays.toString(array));

//        int[] array = new int[10];
//        Arrays.fill(array,5,7,5);
//        System.out.println(Arrays.toString(array));

//        int[] array = {1,2,3,4,5};
//        int[] copy = Arrays.copyOfRange(array,0,3);
//        System.out.println(Arrays.toString(copy));
//        int[] array = {1,2,3,4,5};
//        array = Arrays.copyOf(array,array.length*2);
//        System.out.println(Arrays.toString(array));

        //System.out.println(Arrays.toString(array));
//    }
//
//    public static void main2(String[] args) {
//        int n = 2;
//        int array1 [] = new int[n];
//        int[] array2 = new int[]{1,2,3,4,5};
//        int[] array3;
//        array3 = new int[]{1,2,3,4,5};
//        int[] array = {1,2,3,4,5};
//    }
//
//    //求一个数每一位相加
//    public static int Sum(int i) {
//        int sum = 0;
//        while (i != 0) {
//            sum += (i % 10);
//            i /= 10;
//        }
//        return sum;
//    }
//
//    //判断是否是闰年
//    public static boolean isLeapYear(int i) {
//        if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
//            return true;
//        } else return false;
//    }
//
//    public static void main1(String[] args) {
//        int count = 0;
//        for (int year = 1900; year <= 9999; year++) {
//
//            //求出年每一位的和
//            int yearSum = Sum(year);
//
//            //求月、日的和
//
//            int[] days = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
//            //第一次的错误在于：将判断闰年的函数放置在月循环中，导致每次循环月都会调用判断闰年函数并+=1
//            if (isLeapYear(year)) {
//                //加一天
//                days[2] += 1;
//            }
//
//            //循环月
//            for (int month = 1; month <= 12; month++) {
//                //循环天
//                for (int day = 1; day <= days[month]; day++) {
//                    int monthAndDaySum = Sum(month) + Sum(day);
//                    if (monthAndDaySum == yearSum) {
//                        count++;
//                    }
//                }
//            }
//        }
//        System.out.println(count);
//    }
